﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Test2.Model;

namespace Test2.View
{
    public partial class NieuweKlant : Form
    {

        private iDatabaseRepository databaseRepository = Database.Instance.GetDatabase;
        private iUpdatable nf;
        private int klantID;
        private byte[] modify_date;

        public NieuweKlant(iUpdatable nf)
        {
            InitializeComponent();
            this.nf = nf;
        }

        /// <summary>
        /// Toon de form NieuweKlant met de textboxen ingevuld aan de hand van een Klant uit de db.
        /// </summary>
        /// <param name="nf">Form NieuweFactuur om deze te updaten.</param>
        /// <param name="klantID">Integer ID van de klant</param>
        public NieuweKlant(iUpdatable nf, int klantID)
        {
            InitializeComponent();
            this.Text = "Edit Klant";
            this.nf = nf;
            this.klantID = klantID;
            //waarden invullen
            DataTable dt = databaseRepository.getKlantByID(klantID);
            this.tbVoornaam.Text = dt.Rows[0]["voornaam"].ToString();
            this.tbNaam.Text = dt.Rows[0]["naam"].ToString();
            this.tbAdres.Text = dt.Rows[0]["adres"].ToString();
            this.tbPostcode.Text = dt.Rows[0]["postcode"].ToString();
            this.tbPlaats.Text = dt.Rows[0]["plaats"].ToString();
            this.tbTelefoon.Text = dt.Rows[0]["telefoon"].ToString();
            this.tbEmail.Text = dt.Rows[0]["email"].ToString();
            this.modify_date = dt.Rows[0]["modify_date"] as byte[];
            //btnOpslaan Click-event veranderen
            this.btnOpslaan.Click -= new System.EventHandler(this.btnOpslaanNieuw_Click);
            this.btnOpslaan.Click += new System.EventHandler(this.btnOpslaanUpdate_Click);
        }

        private void btnOpslaanNieuw_Click(object sender, EventArgs e)
        {
            try
            {
                databaseRepository.insertKlant(tbVoornaam.Text.ToString(), tbNaam.Text.ToString(), tbAdres.Text.ToString(), tbPlaats.Text.ToString(), short.Parse(tbPostcode.Text.ToString()), tbTelefoon.Text.ToString(), tbEmail.Text.ToString());
                nf.updateKlanten();
                this.Close();
            }
            catch (FormatException) {
                MessageBox.Show("Gelieve een geldige postcode in te geven","Er is een fout opgetreden");
            }
        }

        private void btnOpslaanUpdate_Click(object sender, EventArgs e)
        {
            try
            {
                bool toegevoegd = databaseRepository.updateKlant(klantID,tbVoornaam.Text.ToString(), tbNaam.Text.ToString(), tbAdres.Text.ToString(), tbPlaats.Text.ToString(), short.Parse(tbPostcode.Text.ToString()), tbTelefoon.Text.ToString(), tbEmail.Text.ToString(),modify_date);
                if (!toegevoegd)
                {
                    DataTable dt = databaseRepository.getKlantByID(klantID);
                    //modify_date op de nieuwe waarden setten zodat er wel kan geupdate worden
                    modify_date = dt.Rows[0]["modify_date"] as byte[];
                    //Huidige waarden tonen
                    lbVoorNaam.Text = dt.Rows[0]["voornaam"].ToString();
                    lbNaam.Text = dt.Rows[0]["naam"].ToString();
                    lbAdres.Text = dt.Rows[0]["adres"].ToString();
                    lbPostcode.Text = dt.Rows[0]["postcode"].ToString();
                    lbPlaats.Text =  dt.Rows[0]["plaats"].ToString();
                    lbTelefoon.Text = dt.Rows[0]["telefoon"].ToString();
                    lbEmail.Text = dt.Rows[0]["email"].ToString();
                    string boodschap = "De gegevens van deze klant zijn veranderd terwijl u\nuw aanpassingen aan het invoeren was.\nAls u wil kunt u uw gegevens terug opslaan of deze aanpassen.";
                    gbHuidigeWaarden.Visible = true;
                    this.Size = new Size(333,this.Size.Height);
                    MessageBox.Show(boodschap, "Concurrency");
                }
                else
                {
                    nf.updateKlanten();
                    this.Close();
                }
            }
            catch (FormatException)
            {
                MessageBox.Show("Gelieve een geldige postcode in te geven", "Er is een fout opgetreden");
            }
        }

    }
}
